package blbetter.training;

import blbetter.db.BLDBRandom;
import blbetter.db.Spiel;
import blbetter.netze.BlBetterInputSit;
import blbetter.netze.NetLoader;
import blbetter.netze.NetLoaderOne;

public class BLTrainerOne extends BLTrainer {

	public BLTrainerOne(int saisonId, int abSpieltag, NetLoader netload,
			String path, int saveAll) {
		super(saisonId, abSpieltag, netload, path, saveAll);
	}

	public BLTrainerOne(BLDBRandom db, int abSpieltag, NetLoader netload,
			String path, int saveAll) {
		super(db, abSpieltag, netload, path, saveAll);
	}

	@Override
	public boolean trainSpiel() throws Exception {
		BlBetterInputSit is;
		Spiel spiel;
		do {
			spiel = db.getRandom(abSpieltag);
			is = blBetterNet.getInputSit(spiel, db);
		} while (is.hasError());

		double dop = spiel.heimTore + spiel.gastTore > 3 ? 0.1 : 0.9;

		double op = blBetterNet.train(is, dop);

		netError += dop - op > 0 ? dop - op : op - dop;

		return true;
	}

	@Override
	public void setBlBetterNet(NetLoader netLoad) {
		this.blBetterNet = ((NetLoaderOne) netload).blBetterNet;
	}

	@Override
	public void statistik() {

	}

	@Override
	public void statistikAusgeben() {
		System.out.println("NetError[" + (trained + anzSpiele) + "]: "
				+ netError / (double) anzSpiele);
	}

}
